//给定两个字符串 s1 和 s2，请编写一个程序，确定其中一个字符串的字符重新排列后，能否变成另一个字符串。 
//
// 示例 1： 
//
// 输入: s1 = "abc", s2 = "bca"
//输出: true 
// 
//
// 示例 2： 
//
// 输入: s1 = "abc", s2 = "bad"
//输出: false
// 
//
// 说明： 
//
// 
// 0 <= len(s1) <= 100 
// 0 <= len(s2) <= 100 
// 
// Related Topics哈希表 | 字符串 | 排序 
//
// 👍 97, 👎 0 
//
//
//
//

package leetcode.editor.day;

import java.util.HashMap;
import java.util.Map;

// 面试题 01.02. 判定是否互为字符重排
// https://leetcode.cn/problems/check-permutation-lcci/
class CheckPermutationLcci {
    public static void main(String[] args) {
        Solution solution = new CheckPermutationLcci().new Solution();
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        // 1.排序
        // 2.hash table
        public boolean CheckPermutation(String s1, String s2) {
            Map<Character, Integer> map = new HashMap<>();
            for (int i = 0; i < s1.length(); i++) {
                char c = s1.charAt(i);
                map.put(c, map.getOrDefault(c, 0) + 1);
            }

            for (int i = 0; i < s2.length(); i++) {
                char c = s2.charAt(i);
                if (!map.containsKey(c)) return false;
                else {
                    if (map.get(c) == 0) return false;
                    else map.put(c, map.getOrDefault(c, 0) - 1);
                }
            }

            return true;
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}
